/*
struct ListNode {
	int val;
	struct ListNode *next;
	ListNode(int x) :
			val(x), next(NULL) {
	}
};*/
class Solution {
public:
	int get_len(ListNode* pHead){
		int ret=0;
		while(pHead){
			++ret;
			pHead=pHead->next;
		}
		
		return ret;
	}
	ListNode* ListDelay(ListNode* pHead,int cnt){
		while(cnt-- && pHead){
			pHead=pHead->next;
		}
		
		return pHead;
	}
    ListNode* FindFirstCommonNode(ListNode* pHead1, ListNode* pHead2) {
        int cnt1=get_len(pHead1);
        int cnt2=get_len(pHead2);
        int dif=abs(cnt1-cnt2);
        if(cnt1>cnt2){
			pHead1=ListDelay(pHead1,dif);
		}
        else{
			pHead2=ListDelay(pHead2,dif);
		}
		while(pHead1 && pHead2 && pHead1->val!=pHead2->val){
			pHead1=pHead1->next;
			pHead2=pHead2->next;
		}
		if(pHead1 && pHead2){
			return pHead1;
		}
		
		return nullptr;
    }
};
